local Array = require("Array")

local Str = {}

 --测试打印函数
function Str:print()
    local str = ""
    for _, v in ipairs(self.data) do
        str = str..v
    end
    print(str)
end

--重置字符串,str: 传入的新字符串
function Str:reset(str)
    self:checkStr(str)
    self.data = str
end

--获取字符串的长度
function Str:len()
    return #self.data
end

--获取字符串的长度,index: 字符串切片的起始索引、endIndex: 字符串切片的终止索引
function Str:sub(index, endIndex)
    if endIndex > #self.data or index < 1 then
        error("所截取的字符串越界")
    end
    local _temp  = Array()
    for i = index, endIndex do
        _temp:push(self.data[i])
    end
    return _temp.data
end

--添加新的字符串
function Str:append(str)
    self:checkStr(str)
    local size = #self.data
    for _, v in ipairs(str) do
        size = size + 1
        self.data[size] = v
    end
end

--字符串判断
function Str:equal(_table)
    self:checkStr(_table)
    if #self.data == #_table.data then
        for k, v in ipairs(self.data) do
            if v ~= _table.data[k] then
                return false
            end
        end
        return true
    end
    return false
end


function Str:checkStr(str)
    if type(str) ~= "table" or str == nil or not next(str) then
        error("请输入正确类型的参数：table")
    end
    return true
end

local function String(x)
    Str:checkStr(x)
    local o ={}
    setmetatable(o, Str)
    Str.__index = Str
    o.data = x
    return o
end

return String